/*
 * Copyright (c), 
 * All rights reserved.
 *
 * Change Logs:
 * Date         Author      Action
 * 2019/05/xx   zck         Create this file
 */


/**
 * @file 	drv_button.c
 * @brief 	按键模块
 * @details 
 * 
 */
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx.h"
#include "drv_systick.h"
#include "drv_button.h"

void BUTTON_Config(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;

	// 使能按键对应的GPIOC,GPIOE时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOE, ENABLE);
 
	// KEY0 KEY1 KEY2引脚的初始化
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_3|GPIO_Pin_2; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;					// 设置为输入
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;					// 上拉
	GPIO_Init(GPIOE, &GPIO_InitStructure);
	
	// KEYUP引脚的初始化
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;					// 设置为下拉
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
}

en_key_val_t BUTTON_IsAnyKeyPress(void)
{
	en_key_val_t ret = EN_KEY_NONE;
	
	if (0 == GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4))
	{
		SYSTICK_DelayNms(10);
		if (0 == GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4))
		{
			while (0 == GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4));
			ret = EN_KEY_0;
		}
	}
	else if (0 == GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3))
	{
		SYSTICK_DelayNms(10);
		if (0 == GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3))
		{
			while (0 == GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3));
			ret = EN_KEY_1;
		}
	}
	else if (0 == GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2))
	{
		SYSTICK_DelayNms(10);
		if (0 == GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2))
		{
			while (0 == GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2));
			ret = EN_KEY_2;
		}
	}
	else if (1 == GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))
	{
		SYSTICK_DelayNms(10);
		if (1 == GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))
		{
			while (0 == GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0));
			ret = EN_KEY_UP;
		}
	}

	return ret;
}

